home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / trueSpace 7.6 / tS761B8Std.exe / {app} / Scripts / D3D / RsD3DMaterialFromME_Template.fx < prev    next >
Text File  |  2008-06-10  |  8KB  |  236 lines

  1.  
  2. #line 3 "MainD3DShaderTemplate"
  3.  
  4. //----------------------------------------------------------------------
  5. //END - The custom shader code
  6. //----------------------------------------------------------------------
  7.  
  8. uniform float RsD3DMaterialFromME_fNormalMod = 1.0f;
  9.  
  10. D3_VERTEXOUTPUT RsD3DMaterialFromME_VertexShader(in RtFloat4 D3_pInputPosition : POSITION, 
  11.                                                  in RtFloat3 D3_vInputNormal : NORMAL,
  12.                                                  in RtFloat3 D3_vInputTangent : TANGENT,
  13.                                                  in float2   D3_vInputTexCoords1 : TEXCOORD0,
  14.                                                  in float2   D3_vInputTexCoords2: TEXCOORD1,
  15.                                                  in RtFloat4 D3_cInputColor : COLOR0)
  16. {
  17.     D3_VERTEXOUTPUT Output;
  18.  
  19.     Output.D3_pClipPosition = mul(D3_pInputPosition , D3_mObjectToClip);
  20.     Output.D3_vVertexTexCoords.xy = D3_vInputTexCoords1.xy;
  21.     Output.D3_vVertexTexCoords.wz = D3_vInputTexCoords2.xy;
  22.     Output.D3_pVertexPosition = mul(D3_pInputPosition, D3_mObjectToWorld);
  23.     float3 vEye = D3_pEye - Output.D3_pVertexPosition;
  24.     Output.D3_vEye.xyz = normalize(vEye);
  25.     Output.D3_vEye.w = length(vEye);
  26.  
  27.     //Flip the normal and tangent direction if we are processing the backface here
  28.     float3 vInputNormal = RsD3DMaterialFromME_fNormalMod * D3_vInputNormal;
  29.     float3 vInputTangent = RsD3DMaterialFromME_fNormalMod * D3_vInputTangent;
  30.  
  31.     float3x3 mToTangent;
  32. //    mToTangent[0] = normalize(vInputTangent);
  33. //    mToTangent[2] = normalize(vInputNormal);
  34.     mToTangent[0] = vInputTangent;
  35.     mToTangent[2] = vInputNormal;
  36.     mToTangent[1] = cross(mToTangent[0], mToTangent[2]); //The cross product to compute binormal NxT
  37.     Output.D3_mToWorld = mul(mToTangent, D3_mObjectToWorldN);
  38.  
  39.     Output.D3_cVertexColor = D3_cInputColor;
  40.     
  41.     rsxi_VarShaderInput;
  42.  
  43.     //------------------------------
  44.     //Perform default processing on variables
  45.     tsxi_SetInputTangentToWorld(Output.D3_mToWorld);
  46.     tsxi_SetInputWorldToObject(D3_mWorldToObject);
  47.     tsxi_SetInputObjectToWorld(D3_mObjectToWorld);
  48.  
  49.     tsxi_SetInputTexCoords1(Output.D3_vVertexTexCoords.xyzw);
  50.     tsxi_SetInputTexCoords2(Output.D3_vVertexTexCoords.wzyx);
  51.     tsxi_SetInputTangent(Output.D3_mToWorld[0]);
  52.     tsxi_SetInputNormal(Output.D3_mToWorld[2]);
  53.     tsxi_SetInputColor(Output.D3_cVertexColor);
  54.     tsxi_SetInputPosition(Output.D3_pVertexPosition);
  55.     tsxi_SetInputEyePos(D3_pEye);
  56.     tsxi_SetInputEyeDir(Output.D3_vEye.xyz);
  57.     tsxi_SetInputEyeDist(Output.D3_vEye.w);
  58.     tsxi_SetInputLightDir(Output.D3_vEye.xyz);
  59.     tsxi_SetInputLightDist(Output.D3_vEye.w);
  60.     tsxi_SetInputLightColor(RtFloat4(1,1,1,1));
  61.  
  62. #ifdef RsVertexLightShaderName
  63.     RtFloat4 vTmpLightColor = tsxi_GetInputLightColor;
  64.     RtFloat3 vTmpLightDir = tsxi_GetInputLightDir;
  65.     RtFloat  vTmpLightDist = tsxi_GetInputLightDist;    
  66.     RsVertexLightShaderName(rsxi_SendShaderInput, vTmpLightColor, vTmpLightDir, vTmpLightDist);
  67.     tsxi_SetInputLightColor(vTmpLightColor);
  68.     tsxi_SetInputLightDir(normalize(vTmpLightDir));
  69.     tsxi_SetInputLightDist(vTmpLightDist);
  70. #endif
  71.  
  72.     Output.D3_vLightVector.xyz = tsxi_GetInputLightDir;
  73.     Output.D3_vLightVector.w = tsxi_GetInputLightDist;
  74.     Output.D3_cLightColor = tsxi_GetInputLightColor;
  75.     return Output;
  76. }
  77.  
  78. D3_PIXELOUTPUT RsD3DMaterialFromME_PixelShader(in D3_PIXELINPUT Input)
  79. {
  80.     D3_PIXELOUTPUT Output;
  81.  
  82.     rsxi_VarShaderInput;
  83.  
  84.     //------------------------------
  85.     //Perform default processing on variables
  86.     tsxi_SetInputTangentToWorld(Input.D3_mToWorld);
  87.     tsxi_SetInputWorldToObject(D3_mWorldToObject);
  88.     tsxi_SetInputObjectToWorld(D3_mObjectToWorld);
  89.  
  90.     tsxi_SetInputTexCoords1(Input.D3_vVertexTexCoords.xyzw);
  91.     tsxi_SetInputTexCoords2(Input.D3_vVertexTexCoords.wzyx);
  92.     tsxi_SetInputTangent(Input.D3_mToWorld[0]);
  93.     tsxi_SetInputNormal(Input.D3_mToWorld[2]);
  94.     tsxi_SetInputColor(Input.D3_cVertexColor);
  95.     tsxi_SetInputPosition(Input.D3_pVertexPosition);
  96.     tsxi_SetInputEyePos(D3_pEye);
  97.     tsxi_SetInputEyeDist(Input.D3_vEye.w);
  98.     tsxi_SetInputEyeDir(normalize(Input.D3_vEye.xyz));
  99.     tsxi_SetInputLightDist(Input.D3_vLightVector.w);
  100.     tsxi_SetInputLightDir(Input.D3_vLightVector.xyz);
  101.     tsxi_SetInputLightColor(Input.D3_cLightColor);
  102.  
  103. #ifdef RsTexcoordShaderName
  104.     RtFloat3 vTmpTexCrd = tsxi_GetInputTexCoords1;
  105.     RsTexcoordShaderName(rsxi_SendShaderInput, vTmpTexCrd);
  106.     tsxi_SetInputTexCoords1(vTmpTexCrd);
  107. #endif
  108. #ifdef RsNormalShaderName
  109.     RtFloat3 vTmpNormal = tsxi_GetInputNormal;
  110.     RtFloat3 vTmpTangent = tsxi_GetInputTangent;
  111.     RsNormalShaderName(rsxi_SendShaderInput, vTmpNormal, vTmpTangent);
  112.     tsxi_SetInputNormal(normalize(vTmpNormal));
  113.     tsxi_SetInputTangent(normalize(vTmpTangent));
  114. #else
  115.     tsxi_SetInputNormal(normalize(tsxi_GetInputNormal));
  116.     tsxi_SetInputTangent(normalize(tsxi_GetInputTangent));
  117. #endif
  118.     
  119. #ifdef RsAlphaShaderName
  120.     RtFloat fTmpAlpha = tsxi_GetInputAlpha;
  121.     RsAlphaShaderName(rsxi_SendShaderInput, fTmpAlpha);
  122.     tsxi_SetInputAlpha(fTmpAlpha);
  123. #endif
  124. #ifdef RsColorShaderName
  125.     RtFloat4 vTmpColor = tsxi_GetInputColor;
  126.     RsColorShaderName(rsxi_SendShaderInput, vTmpColor);
  127.     tsxi_SetInputColor(vTmpColor);
  128. #endif
  129. #ifdef RsLightShaderName
  130.     RtFloat4 vTmpLightColor = tsxi_GetInputLightColor;
  131.     RtFloat3 vTmpLightDir = tsxi_GetInputLightDir;
  132.     RtFloat  fTmpLightDist = tsxi_GetInputLightDist;
  133.     RsLightShaderName(rsxi_SendShaderInput, vTmpLightColor, vTmpLightDir, fTmpLightDist);
  134.     tsxi_SetInputLightColor(vTmpLightColor);
  135.     tsxi_SetInputLightDist(fTmpLightDist);
  136.     tsxi_SetInputLightDir(normalize(vTmpLightDir));
  137. #else
  138.     RtFloat3 vTmpLightDir = tsxi_GetInputLightDir;
  139.     tsxi_SetInputLightDir(normalize(vTmpLightDir));
  140. #endif
  141. #ifdef RsAlphaShaderName
  142.     tsxi_SetInputAlpha(fTmpAlpha);
  143. #endif
  144.     RtFloat4 vTmpOutColor = tsxi_GetInputColor;
  145. #ifdef RsModelShaderName
  146.     RsModelShaderName(rsxi_SendShaderInput, vTmpOutColor);
  147. #endif
  148.     Output.D3_cOutColor = vTmpOutColor;
  149.     return Output;
  150. }
  151.  
  152. pixelshader RsD3DMaterialFromME_PixelShader_ps_2_0 = compile ME_PS_PROFILE RsD3DMaterialFromME_PixelShader();
  153. vertexshader RsD3DMaterialFromME_VertexShader_vs_2_0 = compile ME_VS_PROFILE RsD3DMaterialFromME_VertexShader();
  154.  
  155. //------------------------------
  156. // Techniques
  157. // This is automatically generated code
  158. //------------------------------
  159. //
  160. //This is technique for non opaque mode
  161. technique D3_MAIN_TECHNIQUE
  162. <
  163.     string Rs_PSVersion = "PS_2_0";
  164.     string Rs_TechniqueMode = "firstlight";
  165. >
  166. {
  167. #ifdef RsAlphaShaderName
  168.     pass D3_PASS_01
  169.     {
  170.         VertexShader = (RsD3DMaterialFromME_VertexShader_vs_2_0);
  171.         PixelShader = (RsD3DMaterialFromME_PixelShader_ps_2_0);
  172.  
  173.         AlphaBlendEnable = true;
  174.         SrcBlend = SRCALPHA;
  175.         DestBlend = INVSRCALPHA;
  176.  
  177.         ZEnable = true;
  178.         ZFunc = LESSEQUAL;
  179.         ZWriteEnable = true;
  180.     }
  181. #else
  182.     pass D3_PASS_01
  183.     {
  184.         VertexShader = (RsD3DMaterialFromME_VertexShader_vs_2_0);
  185.         PixelShader = (RsD3DMaterialFromME_PixelShader_ps_2_0);
  186.  
  187.         AlphaBlendEnable = false;
  188.         ZEnable = true;
  189.         ZFunc = LESSEQUAL;
  190.         ZWriteEnable = true;
  191.  
  192.         CullMode = CCW;
  193.     }
  194. #endif //RsAlphaShaderName
  195. }
  196.  
  197. technique D3_MAIN_TECHNIQUE_MOREPASSES
  198. <
  199.     string Rs_PSVersion = "PS_2_0";
  200.     string Rs_TechniqueMode = "morelights";
  201. >
  202. {
  203. #ifdef RsAlphaShaderName
  204.     pass D3_PASS_01
  205.     {
  206.         VertexShader = (RsD3DMaterialFromME_VertexShader_vs_2_0);
  207.         PixelShader = (RsD3DMaterialFromME_PixelShader_ps_2_0);
  208.  
  209.         AlphaBlendEnable = true;
  210.         SrcBlend = SRCALPHA;
  211.         DestBlend = ONE;
  212.  
  213.         ZEnable = true;
  214.         ZFunc = EQUAL;
  215.         ZWriteEnable = false;
  216.     }
  217. #else
  218.     pass D3_PASS_01
  219.     {
  220.         VertexShader = (RsD3DMaterialFromME_VertexShader_vs_2_0);
  221.         PixelShader = (RsD3DMaterialFromME_PixelShader_ps_2_0);
  222.  
  223.         AlphaBlendEnable = true;
  224.  
  225.         SrcBlend = ONE;
  226.         DestBlend = ONE;
  227.         
  228.         ZEnable = true;
  229.         ZFunc = EQUAL;
  230.         ZWriteEnable = false;
  231.  
  232.         CullMode = CCW;
  233.     }
  234. #endif //RsAlphaShaderName
  235. }
  236.